Модель данных¶
Модель данных в TCS создается и изменяется с помощью инструкций SQL DDL.
Логическая организация данных¶
TCS использует табличную модель данных, характерную для большинства СУБД, использующих SQL:
Данные хранятся в таблицах;
Один хранимый объект формирует одну строку таблицы;
Структура таблицы определяется набором ее столбцов – колонок;
Каждая колонка содержит данные одного типа.
Список поддерживаемых типов данных приведен в разделе Типы данных.
Для логической организации таблиц в TCS используется понятие схемы (schema) – именованного пространства хранения таблиц. Каждая таблица может содержаться только в одной схеме. Имена таблиц в разных схемах могут повторяться. Схемы агрегируются в каталоги – аналоги баз данных.
Таким образом, полная иерархия хранения данных в TCS выглядит так:
каталог.схема.таблица
По умолчанию используется каталог tcs и схема public.
Примечание
Поддержка пользовательских каталогов и схем отсутствует в текущей версии TCS.
Таблицы всегда создаются в каталоге и схеме, используемых по умолчанию.
Например, запрос CREATE TABLE a(i int) создаcт таблицу tcs.public.a.
При модификации или чтении данных из схемы по умолчанию можно использовать
только имя таблицы без указания каталога и схемы.
Например, запрос SELECT * FROM customers вернет выборку из таблицы
tcs.public.customers.
Типы данных¶
В TCS используются примитивные типы данных Apache Arrow. Поддерживаются следующие типы:
Тип |
Описание |
|---|---|
|
8-битное знаковое целое |
|
16-битное знаковое целое |
|
32-битное знаковое целое |
|
64-битное знаковое целое |
|
8-битное беззнаковое целое |
|
16-битное беззнаковое целое |
|
32-битное беззнаковое целое |
|
64-битное беззнаковое целое |
|
32-битное с плавающей точкой |
|
64-битное с плавающей точкой |
|
десятичное число с шириной 128 или 256 бит |
|
десятичное число с шириной 128 бит |
|
десятичное число с шириной 256 бит |
|
строка UTF-8 |
|
логический: |
|
UNIX timestamp в миллисекундах |
Десятичные числа¶
Десятичные числа в TCS задаются в формате Apache Arrow и имеют следующие характеристики:
ширина в битах (bit width): 128 или 256 бит
масштаб (scale)
точность (precision)
Ширина (bit width)¶
Ширина (bit width) может быть задана явно (decimal128 или decimal256), либо
вычисляться автоматически на основании точности (precision).
Для чисел с явно заданной шириной (bit width) используются соответствующие значения точности (precision):
для
decimal128точность = 38для
decimal256точность = 76
Точность (precision)¶
Точность (precision) также может быть задана явно или неявно:
Если она задана явно (например,
decimal(3, 2), здесь точность = 3), то:Выполняется следующая проверка для точности:
1 <= precision <= 76
Точность сводится к:
38 (если указанное значение точности <= 38)
76 (если указанное значение точности > 38)
Если она задана неявно (например,
decimal128(2)), то точность уже известна, исходя из ширины (например, дляdecimal128используется точность = 38).
Масштаб (scale)¶
Масштаб (scale) может быть задан только явно. Например, decimal(3, 2) (здесь масштаб = 2).
Для масштаба всегда выполняется следующая проверка:
0 <= scale <= precision
Примеры десятичных чисел¶
Пример SQL-инструкции с десятичными числами:
CREATE TABLE t (
d1 decimal128 (9),
d2 decimal256 (1),
d3 decimal (4, 3),
d4 decimal (39, 2),
)
где:
decimal128(9)bit width = 128
scale = 9
precision = 38
decimal256(1)bit width = 256
scale = 1
precision = 76
decimal(4, 3)bit width = 128
scale = 3
precision = 38 (поскольку 4 <= 38)
decimal(39, 2)bit width = 256
scale = 2
precision = 76 (поскольку 39 > 38)
Массивы¶
TCS не поддерживает хранение массивов (данных типа array), но разрешает передачу массива в запросе.
См. например функцию array_concat.